#include <iostream>
#include <vector>
using namespace std;

typedef struct _tree_node {
	int value;
	struct _tree_node* left;
	struct _tree_node* right;

	_tree_node(int val) {
		value = val;
		left = NULL;
		right = NULL;
	}
}tree_node;

//tree_node* get_tree() {
//	tree_node* r0 = new tree_node(10);
//	tree_node* r1 = new tree_node(5);
//	tree_node* r2 = new tree_node(12);
//	tree_node* r3 = new tree_node(4);
//	tree_node* r4 = new tree_node(7);
//
//	r0->left = r1;
//	r0->right = r2;
//	r1->left = r3;
//	r1->right = r4;
//
//	return r0;
//}
//
//vector<tree_node*> q;
//
//void print() {
//	vector<tree_node*>::iterator iter =	q.begin();
//	while (iter != q.end()) {
//		cout<<(*iter)->value<<" ";
//		iter++;
//	}
//	cout<<endl;
//}
//
//void find_path(tree_node* root, int sum) {
//	if (sum==root->value && (root->left==NULL && root->right==NULL)) {
//		q.push_back(root);
//		print();
//		q.pop_back();
//		return;
//	}
//		
//	if (root->value <= sum) {
//		q.push_back(root);		
//		if (root->left)
//			find_path(root->left,  sum-root->value);
//		if (root->right)
//			find_path(root->right, sum-root->value);
//		q.pop_back();
//	}
//}
//
//int main() {
//	tree_node* root = get_tree();
//	find_path(root, 22);
//	return 0;
//}